/**
 * 在指定范围内获取 n 个随机整数 取值范围 [2, 18]
 * 
 * @param {Number} n 获取随机整数的个数
 * @return {Array} 输入无效  返回空数组   
 */

function fn(n) {
    const min = 2;
    const max = 18;
    const len = max - min + 1;

    // 参数校验

    /*
    * 健壮性 --> 兼容性处理
    *           边界处理 -> 是否在指定范围内
    *           异常处理
    *           用户输入校验
    * */
    if (!isThere(n)) return [];
    if (!typeOK(n) && !isOKStr) return [];
    n = formatIntNum(n);
    if (n < 1 && n > len) return [];

    const arr = [];

    for (let i = 0; i < n; i++) {
        let randomIntNum = getRandomInt(min, max);

        if (arr.indexOf(randomIntNum) !== -1) {
            i--;
        } else {
            arr.push(randomIntNum);
        }
    }
    return arr;
}

function isThere(n) {
    return n !== null && n !== undefined
}

function typeOK(n) {
    return typeof n === 'number'
}

function isOKStr(n) {
    return typeof parseInt(n) === 'number'
}

function formatIntNum(n) {
    return parseInt(n);
}

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min)
}

// Test

console.log(fn('ran222'));
